home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-12-03 | 6.3 KB | 266 lines | [TEXT/PJMM] |
- unit MyOOMenus;
-
- interface
-
- var
- editEnabled: boolean;
-
- procedure InitOOMenus (defaultproc: procptr);
- procedure FinishOOMenus;
- procedure DoDefaultMenu (themenu, theitem: integer);
- function SetOOMenuBar: boolean;
-
- implementation
-
- uses
- Traps, Balloons, MyTypes, MySystemGlobals, MyUtils, MyStrings, MyVersionResource,{}
- BaseGlobals, MyFMenus, MyOOMainLoop, MyOOAboutHelp, AERegistry, MyAEUtils, AEObjects;
-
- const
- about_dialog_ID = 128;
- help_dialog_ID = 129;
- kAEHelp = 'help';
-
- var
- about_object: VerObject;
- help_object: VerObject;
-
- function SetOOMenuBar: boolean;
- begin
- SetOOMenuBar := FrontObject.SetMenuBar;
- end;
-
- procedure MySendEvent (class_id, event_id: AEEventID);
- var
- event, reply: AppleEvent;
- err, junk: OSErr;
- psn: ProcessSerialNumber;
- target: AEDesc;
- begin
- AECreate(reply);
- err := CreateSelfTarget(target);
- err := AECreateAppleEvent(class_id, event_id, target, kAutoGenerateReturnID, kAnyTransactionID, event);
- AEDestroy(target);
- if err = noErr then begin
- junk := AESend(event, reply, kAENoReply + kAEAlwaysInteract, kAENormalPriority, kAEDefaultTimeOut, nil, nil);
- end;
- AEDestroy(event);
- AEDestroy(reply);
- end;
-
- function HandleEditMenu (event, reply: AppleEvent; refcon: longInt): OSErr;
- var
- err: OSErr;
- begin
- FrontObject.DoEditMenu(refcon);
- HandleEditMenu := noErr;
- end;
-
- procedure DoDefaultMenu (themenu, theitem: integer);
- var
- save: grafPtr;
- DAName: str255;
- oe: OSErr;
- begin
- if themenu = M_Apple then begin
- GetPort(save);
- GetItem(GetMHandle(M_apple), theitem, DAName);
- oe := OpenDeskAcc(DAName);
- SetPort(save);
- end
- else if themenu = M_Edit then begin
- if has_AppleEvents then begin
- case theitem of
- EMUndo:
- MySendEvent(kAECoreSuite, kAEUndo);
- EMCut:
- MySendEvent(kAECoreSuite, kAECut);
- EMCopy:
- MySendEvent(kAECoreSuite, kAECopy);
- EMPaste:
- MySendEvent(kAECoreSuite, kAEPaste);
- EMClear:
- MySendEvent(kAECoreSuite, kAEDelete);
- EMSelectAll:
- MySendEvent(kAECoreSuite, kAESelect); { hmmm }
- otherwise
- FrontObject.DoEditMenu(theitem);
- end;
- end
- else begin
- FrontObject.DoEditMenu(theitem);
- end;
- end;
- end;
-
- function HandleAbout (event, reply: AppleEvent; refcon: longInt): OSErr;
- var
- err: OSErr;
- begin
- DoAboutHelp(about_object, about_dialog_id);
- HandleAbout := noErr;
- end;
-
- procedure DoAboutMenu;
- begin
- if has_AppleEvents then begin
- MySendEvent(kAECoreSuite, kAEAbout);
- end
- else begin
- DoAboutHelp(about_object, about_dialog_id);
- end;
- end;
-
- function HandleHelp (event, reply: AppleEvent; refcon: longInt): OSErr;
- var
- err: OSErr;
- begin
- DoAboutHelp(help_object, help_dialog_id);
- HandleHelp := noErr;
- end;
-
- procedure DoHelpMenu;
- begin
- if has_AppleEvents then begin
- MySendEvent(kAECoreSuite, kAEHelp);
- end
- else begin
- DoAboutHelp(help_object, help_dialog_id);
- end;
- end;
-
- procedure SetAboutMenu (themenu, theitem: integer);
- begin
- SetAboutHelpMenu(themenu, theitem, about_object);
- end;
-
- procedure SetHelpMenu (themenu, theitem: integer);
- begin
- SetAboutHelpMenu(themenu, theitem, help_object);
- end;
-
- function HandleClose (event, reply: AppleEvent; refcon: longInt): OSErr;
- var
- err: OSErr;
- begin
- if FrontWindow <> nil then begin
- FrontObject.DoClose;
- err := noErr;
- end
- else begin
- err := errAENoSuchObject;
- end;
- HandleClose := err;
- end;
-
- procedure DoClose;
- begin
- if has_AppleEvents then begin
- MySendEvent(kAECoreSuite, kAEClose);
- end
- else begin
- FrontObject.DoClose;
- end;
- end;
-
- procedure SetCloseMenu (themenu, theitem: integer);
- var
- fw: windowPtr;
- begin
- fw := FrontWindow;
- if fw = nil then
- SetIDItemEnable(themenu, theitem, false)
- else
- SetIDItemEnable(themenu, theitem, windowPeek(fw)^.goAwayFlag);
- end;
-
- procedure SetEditMenus (menu, item: integer);
- begin
- FrontObject.SetEditMenuItem(item);
- end;
-
- procedure DoQuit;
- begin
- if has_AppleEvents then begin
- MySendEvent(kCoreEventClass, kAEQuitApplication);
- end
- else begin
- quitNow := true;
- end;
- end;
-
- {$S Init}
- procedure InitOOMenus (defaultproc: procptr);
- var
- mh: menuHandle;
- oe, junk: OSErr;
- dummyb: boolean;
- hstr: str255;
- vers: versionRecord;
- begin
- quitNow := false;
- editEnabled := true;
- if defaultproc = nil then
- defaultproc := @DoDefaultMenu;
-
- InitFMenus(defaultproc);
- InitOOAboutHelp(about_object);
- InitOOAboutHelp(help_object);
-
- MH_Apple := GetFMenu(M_Apple);
- AddResMenu(MH_Apple, 'DRVR');
- InsertMenu(MH_Apple, 0);
-
- MH_File := GetFMenu(M_File);
- InsertMenu(MH_File, 0);
- MH_Edit := GetFMenu(M_Edit);
- InsertMenu(MH_Edit, 0);
-
- M_HM_Help_I := -1;
- hstr := GetGlobalString(help_menu_text);
- GetVersion(vers);
- SPrintS3(hstr, hstr, vers.name, '', '');
- if has_HelpMgr and (hstr <> '') then begin
- oe := HMGetHelpMenuHandle(mh);
- if (oe = noErr) and (mh <> nil) then begin
- AppendMenu(mh, hstr);
- M_HM_Help_I := CountMItems(mh);
- AddFCommand(kHMHelpMenuID, M_HM_Help_I, CHelp);
- end;
- end;
-
- if has_AppleEvents then begin
- junk := AEInstallEventHandler(kAECoreSuite, kAEClose, @HandleClose, 0, false);
- junk := AEInstallEventHandler(kAECoreSuite, kAEAbout, @HandleAbout, 0, false);
- junk := AEInstallEventHandler(kAECoreSuite, kAEHelp, @HandleHelp, 0, false);
-
- junk := AEInstallEventHandler(kAECoreSuite, kAEUndo, @HandleEditMenu, EMUndo, false);
- junk := AEInstallEventHandler(kAECoreSuite, kAECut, @HandleEditMenu, EMCut, false);
- junk := AEInstallEventHandler(kAECoreSuite, kAECopy, @HandleEditMenu, EMCopy, false);
- junk := AEInstallEventHandler(kAECoreSuite, kAEPaste, @HandleEditMenu, EMPaste, false);
- junk := AEInstallEventHandler(kAECoreSuite, kAEDelete, @HandleEditMenu, EMClear, false);
- junk := AEInstallEventHandler(kAECoreSuite, kAESelect, @HandleEditMenu, EMSelectAll, false);
- end;
-
- SetFBoth(Cabout, @DoAboutMenu, @SetAboutMenu);
- SetFBoth(Chelp, @DoHelpMenu, @SetHelpMenu);
- SetFBoth(Cclose, @DoClose, @SetCloseMenu);
- SetFCommand(Cquit, @DoQuit);
- SetFSetMenu(Cundo, @SetEditMenus);
- SetFSetMenu(Ccut, @SetEditMenus);
- SetFSetMenu(Ccopy, @SetEditMenus);
- SetFSetMenu(Cpaste, @SetEditMenus);
- SetFSetMenu(Cclear, @SetEditMenus);
- SetFSetMenu(Cselectall, @SetEditMenus);
- SetFMenus;
- dummyb := SetOOMenuBar;
- DrawMenuBar;
- end;
-
- {$S Term}
- procedure FinishOOMenus;
- begin
- FinishFMenus;
- end;
-
- end.